package com.stt.videoprocess.base.controller;

import com.stt.videoprocess.base.model.VideoTask;
import com.stt.videoprocess.base.service.VideoProcessingService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * 视频处理控制器
 * 1. 接收视频文件上传
 * 2. 创建处理任务
 * 3. 提供任务状态查询接口
 */
@RestController
@RequestMapping("/api/videos")
@Slf4j
public class VideoController {
    private final VideoProcessingService processingService;

    public VideoController(VideoProcessingService processingService) {
        this.processingService = processingService;
    }

    /**
     * 处理视频文件上传请求(POST)
     * @param file 上传的视频文件，通过multipart/form-data方式传递，参数名为"file"
     * @return 包含处理任务ID的HTTP 200响应实体
     * 流程说明：
     * 1. 记录接收到的视频文件日志
     * 2. 通过处理服务创建异步处理任务
     * 3. 返回生成的任务ID作为响应内容
     */
    @PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
        log.info("接收视频文件: {}", file.getOriginalFilename());
        String taskId = processingService.createProcessingTask(file);
        return ResponseEntity.ok(taskId);
    }

    /**
     * 根据任务ID获取视频处理任务的状态
     *
     * @param taskId 路径参数，需要查询状态的任务唯一标识符。应为字符串类型的任务ID
     * @return 包含视频任务状态信息的ResponseEntity对象，HTTP状态码为200（OK）
     *         返回的VideoTask对象包含任务当前状态、进度等信息
     */
    @GetMapping("/status/{taskId}")
    public ResponseEntity<VideoTask> getTaskStatus(@PathVariable String taskId) {
        VideoTask task = processingService.getTaskStatus(taskId);
        return ResponseEntity.ok(task);
    }
}